/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.fatecpg.zanotti.acessobanco;

import br.com.fatecpg.zanotti.modelo.Produto;
import javax.swing.*;
import java.sql.*;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;

/**
 * Classe responsável por realizar todas consultas relacionadas a Tabela da janela de Produto.
 * @author F.L. Zanotti
 */

public class conTableProduto {
/**
 * Realiza uma consulta sem restrição para preencher a Tabela Produto
 * @param testeTabela
 * @return
 */
    public JTable ConsultaTabelaToda(JTable testeTabela) {
        Connection con = null;
        PreparedStatement pst = null;
        ResultSet rs = null;
        try {
            con = AbreConexao.getConexao();

            String query = "SELECT CDPRODUTO, NMMODELO, NVL(NMCOR, 0) as col from PRODUTO";

            pst = con.prepareStatement(query);

            rs = pst.executeQuery();
            DefaultTableModel modelo = (DefaultTableModel) testeTabela.getModel();
            modelo.setNumRows(0);

            while (rs.next()) {
                String CDPRODUTO = rs.getString("CDPRODUTO");
                String NMMODELO = rs.getString("NMMODELO");
                String NMCOR = rs.getString("col");

                CDPRODUTO = CDPRODUTO.trim();
                NMMODELO = NMMODELO.trim();
                NMCOR = NMCOR.trim();

                Vector teste = new Vector();
                teste.addElement(CDPRODUTO);
                teste.addElement(NMMODELO);
                teste.addElement(NMCOR);

                modelo.addRow(teste);


            }
            System.out.println(testeTabela.getRowCount());
            return testeTabela;
        } catch (SQLException e) {
            System.out.println(e);
        } finally {
            try {
                rs.close();
            } catch (SQLException ex) {
                System.out.println(ex);
            }
            try {
                pst.close();
            } catch (SQLException ex) {
                System.out.println(ex);
            }
            try {
                con.close();
            } catch (SQLException ex) {
                System.out.println(ex);
            }
        }


        return null;
    }
/**
 * Realiza uma consulta por nmfornecedor para preencher a tabela Fornecedor.
 * @param testeTabela
 * @param s
 * @return
 */
    public JTable ConsultaTabelaPorFornecedor(JTable testeTabela, String s) {
        Connection con = null;
        PreparedStatement pst = null;
        ResultSet rs = null;

        try {
            con = AbreConexao.getConexao();

            String query = "SELECT p.CDPRODUTO, p.NMMODELO, NVL(p.NMCOR, 0) as col from PRODUTO p join FORNECEDOR f" +
                    " USING (CDFORNECEDOR)" +
                    " WHERE f.NMFORNECEDOR LIKE '"+s+"%'";



            pst = con.prepareStatement(query);

            rs = pst.executeQuery();
            DefaultTableModel modelo = (DefaultTableModel) testeTabela.getModel();
            modelo.setNumRows(0);

            while (rs.next()) {
                String CDPRODUTO = rs.getString("CDPRODUTO");
                String NMMODELO = rs.getString("NMMODELO");
                String NMCOR = rs.getString("col");

                CDPRODUTO = CDPRODUTO.trim();
                NMMODELO = NMMODELO.trim();
                NMCOR = NMCOR.trim();

                Vector teste = new Vector();
                teste.addElement(CDPRODUTO);
                teste.addElement(NMMODELO);
                teste.addElement(NMCOR);

                modelo.addRow(teste);


             }
            System.out.println(testeTabela.getRowCount());
            return testeTabela;
        } catch (SQLException e) {
            System.out.println(e);
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException ex) {
                    System.out.println(ex);
                }
            }
            if (pst != null) {
                try {
                    pst.close();
                } catch (SQLException ex) {
                    System.out.println(ex);
                }
            }
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException ex) {
                    System.out.println(ex);
                }
            }
        }
        return null;
    }
     /**
      * Realiza consulta por nome do produto para preencher a tabela Produto.
      * @param testeTabela
      * @param s
      * @return
      */
    public JTable ConsultaTabelaPorProduto(JTable testeTabela, String s) {
        Connection con = null;
        PreparedStatement pst = null;
        ResultSet rs = null;
        try {
            con = AbreConexao.getConexao();

            String query = "SELECT CDPRODUTO, NMMODELO, NVL(NMCOR, 0) as col from PRODUTO" +
                    " WHERE NMMODELO LIKE '"+s+"%'" ;




            pst = con.prepareStatement(query);

            rs = pst.executeQuery();
            DefaultTableModel modelo = (DefaultTableModel) testeTabela.getModel();
            modelo.setNumRows(0);

            while (rs.next()) {

                String CDPRODUTO = rs.getString("CDPRODUTO");
                String NMMODELO = rs.getString("NMMODELO");
                String NMCOR = rs.getString("col");

                CDPRODUTO = CDPRODUTO.trim();
                NMMODELO = NMMODELO.trim();
                NMCOR = NMCOR.trim();

                Vector teste = new Vector();
                teste.addElement(CDPRODUTO);
                teste.addElement(NMMODELO);
                teste.addElement(NMCOR);

                modelo.addRow(teste);


            }
            System.out.println(testeTabela.getRowCount());
            return testeTabela;
        } catch (SQLException e) {
            System.out.println(e);
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException ex) {
                    System.out.println(ex);
                }
            }
            if (pst != null) {
                try {
                    pst.close();
                } catch (SQLException ex) {
                    System.out.println(ex);
                }
            }
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException ex) {
                    System.out.println(ex);
                }
            }
        }
        return null;
    }
/**
 * Consulta por Nome do fornecedor e se está ou não esgotado para preencher a tabela Fornecedor.
 * @param testeTabela
 * @param s
 * @return
 */
            public JTable ConsultaTabelaPorFornecedorIC(JTable testeTabela, String s) {
        Connection con = null;
        PreparedStatement pst = null;
        ResultSet rs = null;

        try {
            con = AbreConexao.getConexao();

            String query = "SELECT p.CDPRODUTO, p.NMMODELO, NVL(p.NMCOR, 0) as col from PRODUTO p join FORNECEDOR f" +
                    " USING (CDFORNECEDOR)" +
                    " WHERE f.NMFORNECEDOR LIKE '"+s+"%'" +
                    " AND ICESGOTADO = 'N'";



            pst = con.prepareStatement(query);

            rs = pst.executeQuery();
            DefaultTableModel modelo = (DefaultTableModel) testeTabela.getModel();
            modelo.setNumRows(0);

            while (rs.next()) {
                String CDPRODUTO = rs.getString("CDPRODUTO");
                String NMMODELO = rs.getString("NMMODELO");
                String NMCOR = rs.getString("col");

                CDPRODUTO = CDPRODUTO.trim();
                NMMODELO = NMMODELO.trim();
                NMCOR = NMCOR.trim();

                Vector teste = new Vector();
                teste.addElement(CDPRODUTO);
                teste.addElement(NMMODELO);
                teste.addElement(NMCOR);

                modelo.addRow(teste);


             }
            System.out.println(testeTabela.getRowCount());
            return testeTabela;
        } catch (SQLException e) {
            System.out.println(e);
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException ex) {
                    System.out.println(ex);
                }
            }
            if (pst != null) {
                try {
                    pst.close();
                } catch (SQLException ex) {
                    System.out.println(ex);
                }
            }
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException ex) {
                    System.out.println(ex);
                }
            }
        }
        return null;
    }
/**
 * Consulta por Nome do produto e se está ou não esgotado para preencher a tabela Fornecedor.
 * @param testeTabela
 * @param s
 * @return
 */
            public JTable ConsultaTabelaPorProdutoIC(JTable testeTabela, String s) {
        Connection con = null;
        PreparedStatement pst = null;
        ResultSet rs = null;
        try {
            con = AbreConexao.getConexao();

            String query = "SELECT CDPRODUTO, NMMODELO, NVL(NMCOR, 0) as col from PRODUTO" +
                    " WHERE NMMODELO LIKE '"+s+"%'" +
                    " AND ICESGOTADO = 'N'";



            pst = con.prepareStatement(query);

            rs = pst.executeQuery();
            DefaultTableModel modelo = (DefaultTableModel) testeTabela.getModel();
            modelo.setNumRows(0);

            while (rs.next()) {

                String CDPRODUTO = rs.getString("CDPRODUTO");
                String NMMODELO = rs.getString("NMMODELO");
                String NMCOR = rs.getString("col");

                CDPRODUTO = CDPRODUTO.trim();
                NMMODELO = NMMODELO.trim();
                NMCOR = NMCOR.trim();

                Vector teste = new Vector();
                teste.addElement(CDPRODUTO);
                teste.addElement(NMMODELO);
                teste.addElement(NMCOR);

                modelo.addRow(teste);


            }
            System.out.println(testeTabela.getRowCount());
            return testeTabela;
        } catch (SQLException e) {
            System.out.println(e);
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException ex) {
                    System.out.println(ex);
                }
            }
            if (pst != null) {
                try {
                    pst.close();
                } catch (SQLException ex) {
                    System.out.println(ex);
                }
            }
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException ex) {
                    System.out.println(ex);
                }
            }
        }
        return null;
    }


/**
 * Realiza uma consulta para retornar o numero maxido de cdproduto +1 como int.
 * @return
 */
        public String ConsultaUltimoCDPRODUTO() {
        Connection con = null;
        PreparedStatement pst = null;
        ResultSet rs = null;
        try {
            con = AbreConexao.getConexao();

            String query = "SELECT MAX(CDPRODUTO)+1 as col from PRODUTO";

            pst = con.prepareStatement(query);
            rs = pst.executeQuery();
String CDPRODUTO="";
            while (rs.next()) {
                CDPRODUTO = rs.getString("col");

                CDPRODUTO = CDPRODUTO.trim();



            }

            return CDPRODUTO;
        } catch (SQLException e) {
            System.out.println(e);
        } finally {
            try {
                rs.close();
            } catch (SQLException ex) {
                System.out.println(ex);
            }
            try {
                pst.close();
            } catch (SQLException ex) {
                System.out.println(ex);
            }
            try {
                con.close();
            } catch (SQLException ex) {
                System.out.println(ex);
            }
        }


        return null;
    }
/**
 * Realiza uma consulta a fim de preencher e retornar um objeto Produto a partir de su nome de modelo.
 * @param s
 * @return
 */
          public Produto ConsultaObjetoPorLinha(String s) {
        try {
            Connection con = AbreConexao.getConexao();

            PreparedStatement pst = con.prepareStatement("SELECT cdproduto, cdloja, " +
                    "cdfornecedor, cdnotafiscal, qtproduto, nmmodelo, nmcor, " +
                    "vlcompra, vlvenda, icesgotado from PRODUTO WHERE nmmodelo = ?");
            pst.setString(1, s);
            ResultSet rs = pst.executeQuery();

            while (rs.next()) {

                String cdproduto = rs.getString("cdproduto");
                String cdloja = rs.getString("cdloja");
                String cdfornecedor = rs.getString("cdfornecedor");
                String cdnotafiscal = rs.getString("cdnotafiscal");
                String qtproduto = rs.getString("qtproduto");
                String nmmodelo = rs.getString("nmmodelo");
                String nmcor = rs.getString("nmcor");
                String vlcompra = rs.getString("vlcompra");
                String vlvenda = rs.getString("vlvenda");
                String icesgotado = rs.getString("icesgotado");


                Produto.getInstancia().setCDLOJA(cdloja);
                Produto.getInstancia().setCDPRODUTO(cdproduto);
                Produto.getInstancia().setCDFORNECEDOR(cdfornecedor);
                Produto.getInstancia().setCDNOTAFISCAL(cdnotafiscal);
                Produto.getInstancia().setQTPRODUTO(qtproduto);
                Produto.getInstancia().setNMMODELO(nmmodelo);
                Produto.getInstancia().setNMCOR(nmcor);
                Produto.getInstancia().setVLCOMPRA(vlcompra);
                Produto.getInstancia().setVLVENDA(vlvenda);
                Produto.getInstancia().setICESGOTADO(icesgotado);

          }

              return Produto.getInstancia();

        } catch (SQLException e) {
            System.out.println(e);
        }

        return null;
    }
}
